#!/usr/bin/Rscript
##########################################################################################
# Social Media and Policy Responses to the COVID-19 Pandemic in Switzerland
##########################################################################################
# Description:
##########################################################################################
# False Negative / False Positive Data Sets 
##########################################################################################
# Contents
##########################################################################################
# 1) Dependencies
# 2) Load all necessary Things
# 3) Load curated data
# 4) Descriptive numbers
# 5) Write out twitter covid app and mask as rds
# 6) False Negative Sample
# 7) False Positive Sample
# 8) Other Sample
##########################################################################################
# 1) Dependencies
##########################################################################################
suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readr))
suppressPackageStartupMessages(library(quanteda))
suppressPackageStartupMessages(library(magrittr))
suppressPackageStartupMessages(library(purrr))
suppressPackageStartupMessages(library(stringr))
suppressPackageStartupMessages(library(glue))
suppressPackageStartupMessages(library(forcats))
suppressPackageStartupMessages(library(showtext))
suppressPackageStartupMessages(library(lubridate))
suppressPackageStartupMessages(library(sysfonts))
##########################################################################################
# 2) Load all necessary Things
##########################################################################################
rm(list=ls())
# - set dir
args = commandArgs()

scriptName = args[substr(args,1,7) == '--file=']

if (length(scriptName) == 0) {
  scriptName <- rstudioapi::getSourceEditorContext()$path
} else {
  scriptName <- substr(scriptName, 8, nchar(scriptName))
}

pathName = substr(
  scriptName, 
  1, 
  nchar(scriptName) - nchar(strsplit(scriptName, '.*[/|\\]')[[1]][2])
)

setwd(pathName)
parent_path <- getwd()

# - load fonts used in plots
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")

# load ggplot theme of the DigDemLab 
suppressMessages(suppressWarnings(source('ggplot_theme_ddl.R')))
# - model-configurations to consider
langs <- list(c("de"),
              c("fr"),
              c("it"),
              c("en"),
              c("de","fr","it"),
              c("de","fr","it","en"),
              c("all"))

langusges_l <- c("de","fr","it","en","de_fr_it","de_fr_it_en","alle")

lang_long <- c(" auf Deutsch", " auf Englisch", " auf Französisch", " auf Italienisch", " auf De & FR & IT", " auf De & FR & IT & EN", "")
lang_long <- c( " in German", " in English", " in French", " in Italian", " in DE & FR & IT", " in DE & FR & IT & EN", "")

colorlist1 <- list(`Anderes`="#BFA5A8", `Bund & Kantone`="#DD2461", `Medien (De)`="#4B8178", `Medien (Fr)`="#008E7A", `Partei`="#574144", `Medien (It)`="#32BEAE")
colorlist1 <- list(`Rest`="#BFA5A8", `Fed. Gov. & Cantons`="#DD2461", `Media (De)`="#4B8178", `Media (Fr)`="#008E7A", `Parties`="#574144", `Media (It)`="#32BEAE")
fillcolor1 <- unlist(colorlist1)
lim_max <- "2020-08-20"
##########################################################################################
# 3) Load curated data
##########################################################################################
# - load data:
tdf <- readRDS("../data/Twitter_data.RDS") %>% dplyr::mutate(Datum = as.Date(Datum)) %>% 
  dplyr::filter(Datum > as.Date("2020-02-21") & Datum < as.Date("2020-08-23"))

# Get Language of Tweet:
library(pbmcapply)

text_df <- tdf$Text
len_l <- length(text_df)
gc()
la <- pbmclapply(1:len_l, function(l){
  lang <- cld2::detect_language_mixed(text_df[l])
  lang <- lang[[1]]
  
  if(lang$code[1] %in% c("de","fr","it","en")){
    lang <- lang$code[1]
  } else if (lang$code[2] %in% c("de","fr","it","en")) {
    lang <- lang$code[2]
  } else if (lang$code[3] %in% c("de","fr","it","en")) {
    lang <- lang$code[3]
  } else {
    lang <- lang$code[1]
  }
}, mc.cores = 2)
la <- unlist(la)
tdf$la <- la
rm(len_l, text_df, la)
gc()

tdf <- tdf %>% filter(la == "de")

sdf <- readRDS("../data/SMD_CDT_data.RDS") %>% dplyr::filter(pubDateTime > as.Date("2020-02-21") & pubDateTime < as.Date("2020-08-23"))

sdf <- sdf %>% dplyr::filter(la == "de")

fdf <- readRDS("../data/Facebook_data.RDS") %>% dplyr::mutate(Datum = as.Date(Datum)) %>%
  dplyr::filter(Datum > as.Date("2020-02-21") & Datum < as.Date("2020-08-23"))

fdf <- fdf %>% dplyr::filter(la == "de")


tdf <- tdf %>% mutate(Party = tolower(Party)) %>%
  dplyr::filter(Party %in% c("alternative - die grünen zug", "alternative-die grünen kanton zug", "bürgerlich-demokratische partei schweiz", "christlich-soziale partei",
                             "christlichdemokratische volkspartei der schweiz", "christlichdemokratische volkspartei oberwallis", "fdp.die liberalen", 
                             "grüne (basels starke alternative)", "grüne partei der schweiz", "grünliberale partei", "na", "nd", "schweizerische volkspartei",
                             "sozialdemokratische partei der schweiz", NA)) %>% 
  dplyr::mutate(Party = case_when(Party %in% c("grüne (basels starke alternative)", 
                                               "grüne partei der schweiz", 
                                               "alternative - die grünen zug",
                                               "alternative-die grünen kanton zug") ~ "Grüne",
                                  Party %in% c("sozialdemokratische partei der schweiz") ~ "SP",
                                  Party %in% c("schweizerische volkspartei") ~ "SVP",
                                  Party %in% c("fdp.die liberalen") ~ "FDP",
                                  Party %in% c("christdemokratische volkspartei der schweiz",
                                               "christlichdemokratische volkspartei der schweiz",
                                               "christlich-soziale partei", 
                                               "christlichdemokratische volkspartei oberwallis",
                                               "christlichsoziale volkspartei oberwallis") ~ "CVP",
                                  Party %in% c("grünliberale partei") ~ "GLP",
                                  Party %in% c("bürgerlich-demokratische partei schweiz") ~"BDP",
                                  Party %in% c("na", "nd") ~ "NA",
                                  TRUE ~ Party))

tdf <- tdf %>% mutate(Party = ifelse(Party %in% c("NA") == T, NA, Party))
# - remove tweets from actors we are not interested in:
tdf <- tdf %>% dplyr::filter(!Akteur.Typ %in% c("Institute","Gericht", "NA")) %>%
  dplyr::filter((!Akteur.Typ %in% c("Party","Person") & is.na(Party) == F)==F) %>% 
  dplyr::mutate(Akteur.Typ = as.character(Akteur.Typ))%>% 
  dplyr::mutate(Akteur.Typ = ifelse(is.na(Akteur.Typ), "ND", Akteur.Typ))


tdf <- tdf %>% dplyr::mutate(Akteur.Typ = as.character(Akteur.Typ)) %>% 
  dplyr::mutate(Akteur_Art = ifelse(Akteur.Typ == "Party", "Party",
                                    ifelse(Akteur.Typ == "Media", "Media", 
                                           ifelse(Akteur.Typ == "Person", "Politican", 
                                                  ifelse(Akteur.Typ %in% c("Administration","Departement","Bundesamt"), "Gov",
                                                         ifelse(Akteur.Typ %in% c("Organisation","Komitee"), "Org", 
                                                                ifelse(Akteur.Typ =="ND", "SnowBallers", "NA")))))))

# - remove all retweets from tweets
retweet_out = T
if(retweet_out == T){
  tdf <- tdf %>% dplyr::filter(Is_retweet != T)
  unique(tdf$Is_retweet) # - check if all is  in order
}

gc()

# - factorize topic
tdf$topic <- factor(tdf$topic, levels = c("Covid19","Masks","App","App & Masks","Anderes"))
sdf$topic <- factor(sdf$topic, levels = c("Covid19","Masks","App","App & Masks","Anderes"))
fdf$topic <- factor(fdf$topic, levels = c("Covid19","Masks","App","App & Masks","Anderes"))
##########################################################################################
# 4) Descriptive numbers
##########################################################################################
tdf %>% group_by(Akteur_Art, User_id) %>% summarise(n = n()) %>% group_by(Akteur_Art) %>% summarise(n = n())
tdf %>% group_by(Akteur_Art) %>% summarise(n = n())
##########################################################################################
# 5) Write out twitter covid app and mask as rds
##########################################################################################
covid <- tdf %>% filter(topic_covid == "COVID19")
mask <- tdf %>% filter(topic_mask == "Mask")
apps <- tdf %>% filter(topic_app_small == "CovidApp")

saveRDS(covid, "../data/Twitter_covid.RDS")
saveRDS(mask, "../data/Twitter_mask.RDS")
saveRDS(apps, "../data/Twitter_app.RDS")

rm(apps,covid,mask)

covid <- fdf %>% filter(topic_covid == "COVID19")
mask <- fdf %>% filter(topic_mask == "Masks")
apps <- fdf %>% filter(topic_app_small == "CovidApp")

saveRDS(covid, "../data/Facebook_covid.RDS")
saveRDS(mask, "../data/Facebook_mask.RDS")
saveRDS(apps, "../data/Facebook_app.RDS")

##########################################################################################
# 6) False Negative Sample
##########################################################################################
set.seed(123456)
neg_samp <- tdf %>%  filter(topic_covid %in% c("COVID19")) %>% sample_n(250) %>% select(c(User_id, Status_id, Screen_name, Text, topic_covid))

write_csv(neg_samp, "../data/false_negative_sample_twitter.csv")
saveRDS(neg_samp, "../data/false_negative_sample_twitter.RDS")

neg_samp <- tdf %>%  filter(topic_covid %in% c("Anderes")) %>% sample_n(250) %>% select(c(User_id, Status_id, Screen_name, Text, topic_covid))
write_csv(neg_samp, "../data/false_negative_sample_twitter_2.csv")
saveRDS(neg_samp, "../data/false_negative_sample_twitter_2.RDS")

rm(apps,covid,mask)

##########################################################################################
# 7) False Positive Sample
##########################################################################################
set.seed(123456)
neg_samp <- tdf %>%  filter(topic_covid %in% c("COVID19")) %>% sample_n(100) %>% select(c(User_id, Status_id, Screen_name, Text, topic_covid))

write_csv(neg_samp, "../data/false_positive_sample_twitter.csv")
saveRDS(neg_samp, "../data/false_positive_sample_twitter.RDS")

neg_samp <- tdf %>%  filter(topic_mask %in% c("Mask")) %>% sample_n(100) %>% select(c(User_id, Status_id, Screen_name, Text, topic_mask))
write_csv(neg_samp, "../data/false_positive_sample_twitter_2.csv")
saveRDS(neg_samp, "../data/false_positive_sample_twitter_2.RDS")

neg_samp <- tdf %>%  filter(topic_app_small %in% c("CovidApp")) %>% sample_n(100) %>% select(c(User_id, Status_id, Screen_name, Text, topic_app_small))
write_csv(neg_samp, "../data/false_positive_sample_twitter_3.csv")
saveRDS(neg_samp, "../data/false_positive_sample_twitter_3.RDS")

rm(apps,covid,mask)


##########################################################################################
# 8) Other Sample
##########################################################################################
set.seed(1234)
sample <- sdf %>% filter(topic_covid == "COVID19") %>% 
  filter(topic_mask == "Mask") %>% 
  group_by(so) %>% slice_sample(n = 10) %>%
  select(c(so_txt, so, ht, ut, tx, topic, topic_mask, topic_covid))

write_csv(sample, "../sample_smd_mask.csv")

set.seed(1234)
sample <- sdf %>% filter(topic_covid == "COVID19") %>% 
  filter(topic_app == "CovidApp") %>% 
  group_by(so) %>% slice_sample(n = 10) %>%
  select(c(so_txt, so, ht, ut, tx, topic, topic_app, topic_covid))

write_csv(sample, "../sample_smd_app.csv")